package eu.catengine.audio;

import android.media.MediaPlayer;
import eu.catengine.common.iface.IDisposable;
import eu.catengine.common.listener.AudioListener;

/**
 * Klasa przechowująca pojedycznie dźwięki.<br>
 * Z zasady wszystkie obiekty tej klasy powinny być zarządzane poprzez manager.
 * 
 * @author mbienkowski
 */
public class Audio extends MediaPlayer implements IDisposable
{
    private String mName;
    private MediaPlayer mPlayer;
    private AudioListener mAudioListener;

    /**
     * Konstuktor domyślny. <br>
     * Obiekty tej klasy tworzone są automatycznie przez AudioManager. <br>
     * Nie należy tworzyć pojedynczych obiektów klasy bez udziału managera.
     */
    public Audio(String name, MediaPlayer player)
    {
	mName = name;
	mPlayer = player;
    }

    /**
     * Włącza odtwarzanie dzwięku.
     */
    public void play()
    {
	mPlayer.start();
	
	if(mAudioListener != null)
	{
	    mAudioListener.onAudioStarted(mName, this);
	}
    }

    /**
     * Pauzuje odtwarzanie dzwięku.
     */
    public void pause()
    {
	mPlayer.pause();

	if(mAudioListener != null)
	{
	    mAudioListener.onAudioPaused(mName, this);
	}
    }

    /**
     * Zatrzymuje odtwarzanie dzwięku.
     */
    public void stop()
    {
	mPlayer.stop();

	if(mAudioListener != null)
	{
	    mAudioListener.onAudioStopped(mName, this);
	}
    }

    /**
     * Ustawia głośność dla obu kanałów.
     */
    public void setVolume(float volume)
    {
	mPlayer.setVolume(volume, volume);
    }

    /**
     * Ustawia głośność oddzielnie dla lewego i prawego kanału.
     */
    public void setVolume(float leftVolume, float rightVolume)
    {
	mPlayer.setVolume(leftVolume, rightVolume);
    }
    
    /**
     * Ustawia obiekt nasłuchujący dla odtwarzanego dźwięku.
     */
    public void setAudioListener(AudioListener listener)
    {
	mAudioListener = listener;
    }

    @Override
    public void dispose()
    {
	mPlayer.release();
    }
}
